package net.suncaper.mvc.mapper;

import net.suncaper.mvc.model.domain.Role;
import net.suncaper.mvc.model.domain.RolePermission;
import net.suncaper.mvc.model.domain.UserRole;

import java.util.List;

/**
 * Role表数据库访问接口
 */
public interface RoleMapper {
    /**
     * 新增角色信息
     *
     * @param role 角色信息
     * @return 新增结果
     */
    boolean insertRole(Role role);

    /**
     * 根据角色ID查询角色信息
     *
     * @param roleId 角色ID
     * @return 角色信息
     */
    Role selectRoleById(Integer roleId);

    /**
     * 根据角色名称查询角色信息
     *
     * @param roleName 角色名称
     * @return 角色信息
     */
    Role selectRoleByName(String roleName);

    /**
     * 查询所有角色信息
     *
     * @return 角色列表
     */
    List<Role> selectAllRoles();

    /**
     * 更新角色信息
     *
     * @param role 角色信息
     * @return 更新结果
     */
    boolean updateRole(Role role);

    /**
     * 删除角色信息
     *
     * @param roleId 角色ID
     * @return 删除结果
     */
    boolean deleteRole(Integer roleId);
    
    /**
     * 为角色分配权限
     *
     * @param rolePermission 角色权限关联信息
     * @return 分配结果
     */
    boolean assignPermissionToRole(RolePermission rolePermission);
    
    /**
     * 为用户分配角色
     *
     * @param userRole 用户角色关联信息
     * @return 分配结果
     */
    boolean assignRoleToUser(UserRole userRole);
    
    /**
     * 根据用户ID查询用户的角色列表
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    List<Role> selectRolesByUserId(String userId);
    
    /**
     * 移除用户的角色
     *
     * @param userId 用户ID
     * @param roleId 角色ID
     * @return 移除结果
     */
    boolean removeRoleFromUser(String userId, Integer roleId);
    
    /**
     * 移除角色的权限
     *
     * @param roleId 角色ID
     * @param permissionId 权限ID
     * @return 移除结果
     */
    boolean removePermissionFromRole(Integer roleId, Integer permissionId);
} 